package beans;

import java.util.List;

import javax.naming.NamingException;

import org.richfaces.component.html.HtmlDataTable;

import co.edu.uniquindio.ondas.delegados.AsesorDelegado;
import co.edu.uniquindio.ondas.dtos.ResumenConsultaDTO;
import co.edu.uniquindio.ondas.dtos.ResumenInvestigacionDTO;
import co.edu.uniquindio.ondas.entidades.Actividad;
import co.edu.uniquindio.ondas.entidades.Asesor;
import co.edu.uniquindio.ondas.entidades.Bitacora4Maestro;
import co.edu.uniquindio.ondas.entidades.ComentarioAsesor;
import co.edu.uniquindio.ondas.entidades.RespuestaConsulta;
import co.edu.uniquindio.ondas.entidades.Segmento;
/**
 * @author Javier
 *Bean para el Asesor del Sistema
 */
public class AsesorBean {

	private boolean autenticado = false;
	private AsesorDelegado asesorDelegado;
	private Asesor asesor = new Asesor();
	private List<ResumenConsultaDTO> listaConsultas;
	private HtmlDataTable tablaConsultas;
	private ResumenConsultaDTO consultaSeleccionada=new ResumenConsultaDTO(0, null, null, null, null, null, null);
	
	private HtmlDataTable tablaRespuesta;
	private List<RespuestaConsulta> listaRespuestas;
	private RespuestaConsulta nuevaRespuesta=new RespuestaConsulta();
	
	private HtmlDataTable tablaInvestigacion;
	private List<ResumenInvestigacionDTO> listaInvestigaciones;
	private ResumenInvestigacionDTO investigacionSeleccionada=new ResumenInvestigacionDTO(0, 0, null, null, null, null, 0, null);
	
	private List<Segmento> listaSegmentosInvestigacion;
	private Segmento segmento1=new Segmento();
	private Segmento segmento2=new Segmento();
	private Segmento segmento3=new Segmento();
	private List<Actividad>listaActividadesInvestigacion;
	private Bitacora4Maestro bitacora4Maestro;
	
	private ComentarioAsesor nuevoComentario=new ComentarioAsesor();

	

	/**
	 * Permite iniciar sesion de Asesor
	 * @return
	 * @throws NamingException
	 */
	public String iniciarSesion() throws NamingException {
		asesorDelegado = new AsesorDelegado();

		System.out.println("id " + asesor.getIdentificacion() + "pas "
				+ asesor.getClave());
		autenticado = asesorDelegado.inicioSesionAsesor(
				asesor.getIdentificacion(), asesor.getClave());

		return "";
	}

	/**
	 * Metodo que Permite cerrar la sesion de un Asesor
	 * @return
	 */
	public String cerrarSesion() {
		autenticado = false;
		return "";

	}

	/**
	 *Metodo que Permite modificar la cuenta de un Asesor
	 * @return
	 */
	public String modificarAsesor() {
		asesorDelegado.modificarAsesor(asesor);
		return "";

	}
	
	/**
	 * Metodo que Permite obtener un Asesor mediante su Identificacion
	 * @return "modificarAsesor"
	 */
	public String obtenerAsesorEditar()
	{
		asesor=asesorDelegado.getAsesor(asesor.getIdentificacion());
		
		return "modificarAsesor";
	}
	
	/**
	 * Metodo que permite obtener la consultas de Un Asesor
	 * @return "consultasAsesor"
	 */
	public String obtenerConsultasAsesor()
	{
		listaConsultas=asesorDelegado.obtenerConsultasAsesor(asesor.getIdentificacion());
		return "consultasAsesor";
	}
	
	/**
	 * Metodo que permite seleccionar una Consulta a responder
	 * @return "responderConsulta"
	 */
	public String seleccionarConsulta()
	{
		consultaSeleccionada=(ResumenConsultaDTO) getTablaConsultas().getRowData();
		listaRespuestas=asesorDelegado.obtenerRespuestasConsulta(consultaSeleccionada.getIdConsulta());
		return "responderConsulta";
	}
	
	/**
	 * Metodo que permite crear una respuesta a una consulta
	 * @return "responderConsulta"
	 */
	public String crearRespuesta()
	{
		asesorDelegado.crearRespuestaConsulta(nuevaRespuesta, consultaSeleccionada.getIdConsulta());
		listaRespuestas=asesorDelegado.obtenerRespuestasConsulta(consultaSeleccionada.getIdConsulta());
		nuevaRespuesta=new RespuestaConsulta();
		return "responderConsulta";
	}
	
	/**
	 * Metodo que permite obtener las investigaciones Asignadas a un Asesor registradas en el sistema 
	 * @return "investigacionesAsesor"
	 */
	public String obtenerInvestigacionesAsesor()
	{
		listaInvestigaciones=asesorDelegado.obtenerInvestigacionAsesor(asesor.getIdentificacion());
		return "investigacionesAsesor";
	}
	
	/**
	 * Metodo que permitene seleccionar una investigacion a financiar
	 * @return "resumenInvestigacionAsesor"
	 */
	public String seleccionarInvestigacion()
	{
		investigacionSeleccionada=(ResumenInvestigacionDTO) getTablaInvestigacion().getRowData();
		listaSegmentosInvestigacion=asesorDelegado.obtenerSegmentosInvestigacion(investigacionSeleccionada.getIdInvestigacion());
		if (listaSegmentosInvestigacion.size()!=0) {
			segmento1=listaSegmentosInvestigacion.get(0);
			segmento2=listaSegmentosInvestigacion.get(1);
			segmento3=listaSegmentosInvestigacion.get(2);
		}
		
		listaActividadesInvestigacion=asesorDelegado.obtenerActividadesInvestigacion(investigacionSeleccionada.getIdInvestigacion());
		bitacora4Maestro=asesorDelegado.obtenerBitacora4Maestro(investigacionSeleccionada.getIdInvestigacion());
		return "resumenInvestigacionAsesor";
	}
	
	/**
	 * Metodo que permite crear un comentario 
	 * @return obtenerInvestigacionesAsesor() metodo que obtiene las Investigaciones asignadas a un Asesor
	 */
	public String crearComentario()
	{
		asesorDelegado.crearComentarioAsesor(nuevoComentario, investigacionSeleccionada.getIdInvestigacion());
		return obtenerInvestigacionesAsesor();
	}

	/**
	 *Metodo accesor del atributo autenticado
	 * @return the autenticado
	 */
	public boolean isAutenticado() {
		return autenticado;
	}

	/**
	 *Metodo Modificador del atributo autenticado
	 * @param autenticado the autenticado to set
	 */
	public void setAutenticado(boolean autenticado) {
		this.autenticado = autenticado;
	}

	/**
	 *Metodo accesor del atributo asesorDelegado
	 * @return the asesorDelegado
	 */
	public AsesorDelegado getAsesorDelegado() {
		return asesorDelegado;
	}

	/**
	 *Metodo Modificador del atributo asesorDelegado
	 * @param asesorDelegado the asesorDelegado to set
	 */
	public void setAsesorDelegado(AsesorDelegado asesorDelegado) {
		this.asesorDelegado = asesorDelegado;
	}

	/**
	 *Metodo accesor del atributo asesor
	 * @return the asesor
	 */
	public Asesor getAsesor() {
		return asesor;
	}

	/**
	 *Metodo Modificador del atributo asesor
	 * @param asesor the asesor to set
	 */
	public void setAsesor(Asesor asesor) {
		this.asesor = asesor;
	}

	/**
	 *Metodo accesor del atributo listaConsultas
	 * @return the listaConsultas
	 */
	public List<ResumenConsultaDTO> getListaConsultas() {
		return listaConsultas;
	}

	/**
	 *Metodo Modificador del atributo listaConsultas
	 * @param listaConsultas the listaConsultas to set
	 */
	public void setListaConsultas(List<ResumenConsultaDTO> listaConsultas) {
		this.listaConsultas = listaConsultas;
	}

	/**
	 *Metodo accesor del atributo tablaConsultas
	 * @return the tablaConsultas
	 */
	public HtmlDataTable getTablaConsultas() {
		return tablaConsultas;
	}

	/**
	 *Metodo Modificador del atributo tablaConsultas
	 * @param tablaConsultas the tablaConsultas to set
	 */
	public void setTablaConsultas(HtmlDataTable tablaConsultas) {
		this.tablaConsultas = tablaConsultas;
	}

	/**
	 *Metodo accesor del atributo consultaSeleccionada
	 * @return the consultaSeleccionada
	 */
	public ResumenConsultaDTO getConsultaSeleccionada() {
		return consultaSeleccionada;
	}

	/**
	 *Metodo Modificador del atributo consultaSeleccionada
	 * @param consultaSeleccionada the consultaSeleccionada to set
	 */
	public void setConsultaSeleccionada(ResumenConsultaDTO consultaSeleccionada) {
		this.consultaSeleccionada = consultaSeleccionada;
	}

	/**
	 *Metodo accesor del atributo tablaRespuesta
	 * @return the tablaRespuesta
	 */
	public HtmlDataTable getTablaRespuesta() {
		return tablaRespuesta;
	}

	/**
	 *Metodo Modificador del atributo tablaRespuesta
	 * @param tablaRespuesta the tablaRespuesta to set
	 */
	public void setTablaRespuesta(HtmlDataTable tablaRespuesta) {
		this.tablaRespuesta = tablaRespuesta;
	}

	/**
	 *Metodo accesor del atributo listaRespuestas
	 * @return the listaRespuestas
	 */
	public List<RespuestaConsulta> getListaRespuestas() {
		return listaRespuestas;
	}

	/**
	 *Metodo Modificador del atributo listaRespuestas
	 * @param listaRespuestas the listaRespuestas to set
	 */
	public void setListaRespuestas(List<RespuestaConsulta> listaRespuestas) {
		this.listaRespuestas = listaRespuestas;
	}

	/**
	 *Metodo accesor del atributo nuevaRespuesta
	 * @return the nuevaRespuesta
	 */
	public RespuestaConsulta getNuevaRespuesta() {
		return nuevaRespuesta;
	}

	/**
	 *Metodo Modificador del atributo nuevaRespuesta
	 * @param nuevaRespuesta the nuevaRespuesta to set
	 */
	public void setNuevaRespuesta(RespuestaConsulta nuevaRespuesta) {
		this.nuevaRespuesta = nuevaRespuesta;
	}

	/**
	 *Metodo accesor del atributo tablaInvestigacion
	 * @return the tablaInvestigacion
	 */
	public HtmlDataTable getTablaInvestigacion() {
		return tablaInvestigacion;
	}

	/**
	 *Metodo Modificador del atributo tablaInvestigacion
	 * @param tablaInvestigacion the tablaInvestigacion to set
	 */
	public void setTablaInvestigacion(HtmlDataTable tablaInvestigacion) {
		this.tablaInvestigacion = tablaInvestigacion;
	}

	/**
	 *Metodo accesor del atributo listaInvestigaciones
	 * @return the listaInvestigaciones
	 */
	public List<ResumenInvestigacionDTO> getListaInvestigaciones() {
		return listaInvestigaciones;
	}

	/**
	 *Metodo Modificador del atributo listaInvestigaciones
	 * @param listaInvestigaciones the listaInvestigaciones to set
	 */
	public void setListaInvestigaciones(
			List<ResumenInvestigacionDTO> listaInvestigaciones) {
		this.listaInvestigaciones = listaInvestigaciones;
	}

	/**
	 *Metodo accesor del atributo investigacionSeleccionada
	 * @return the investigacionSeleccionada
	 */
	public ResumenInvestigacionDTO getInvestigacionSeleccionada() {
		return investigacionSeleccionada;
	}

	/**
	 *Metodo Modificador del atributo investigacionSeleccionada
	 * @param investigacionSeleccionada the investigacionSeleccionada to set
	 */
	public void setInvestigacionSeleccionada(
			ResumenInvestigacionDTO investigacionSeleccionada) {
		this.investigacionSeleccionada = investigacionSeleccionada;
	}

	/**
	 *Metodo accesor del atributo listaSegmentosInvestigacion
	 * @return the listaSegmentosInvestigacion
	 */
	public List<Segmento> getListaSegmentosInvestigacion() {
		return listaSegmentosInvestigacion;
	}

	/**
	 *Metodo Modificador del atributo listaSegmentosInvestigacion
	 * @param listaSegmentosInvestigacion the listaSegmentosInvestigacion to set
	 */
	public void setListaSegmentosInvestigacion(
			List<Segmento> listaSegmentosInvestigacion) {
		this.listaSegmentosInvestigacion = listaSegmentosInvestigacion;
	}

	/**
	 *Metodo accesor del atributo segmento1
	 * @return the segmento1
	 */
	public Segmento getSegmento1() {
		return segmento1;
	}

	/**
	 *Metodo Modificador del atributo segmento1
	 * @param segmento1 the segmento1 to set
	 */
	public void setSegmento1(Segmento segmento1) {
		this.segmento1 = segmento1;
	}

	/**
	 *Metodo accesor del atributo segmento2
	 * @return the segmento2
	 */
	public Segmento getSegmento2() {
		return segmento2;
	}

	/**
	 *Metodo Modificador del atributo segmento2
	 * @param segmento2 the segmento2 to set
	 */
	public void setSegmento2(Segmento segmento2) {
		this.segmento2 = segmento2;
	}

	/**
	 *Metodo accesor del atributo segmento3
	 * @return the segmento3
	 */
	public Segmento getSegmento3() {
		return segmento3;
	}

	/**
	 *Metodo Modificador del atributo segmento3
	 * @param segmento3 the segmento3 to set
	 */
	public void setSegmento3(Segmento segmento3) {
		this.segmento3 = segmento3;
	}

	/**
	 *Metodo accesor del atributo listaActividadesInvestigacion
	 * @return the listaActividadesInvestigacion
	 */
	public List<Actividad> getListaActividadesInvestigacion() {
		return listaActividadesInvestigacion;
	}

	/**
	 *Metodo Modificador del atributo listaActividadesInvestigacion
	 * @param listaActividadesInvestigacion the listaActividadesInvestigacion to set
	 */
	public void setListaActividadesInvestigacion(
			List<Actividad> listaActividadesInvestigacion) {
		this.listaActividadesInvestigacion = listaActividadesInvestigacion;
	}

	/**
	 *Metodo accesor del atributo bitacora4Maestro
	 * @return the bitacora4Maestro
	 */
	public Bitacora4Maestro getBitacora4Maestro() {
		return bitacora4Maestro;
	}

	/**
	 *Metodo Modificador del atributo bitacora4Maestro
	 * @param bitacora4Maestro the bitacora4Maestro to set
	 */
	public void setBitacora4Maestro(Bitacora4Maestro bitacora4Maestro) {
		this.bitacora4Maestro = bitacora4Maestro;
	}

	/**
	 *Metodo accesor del atributo nuevoComentario
	 * @return the nuevoComentario
	 */
	public ComentarioAsesor getNuevoComentario() {
		return nuevoComentario;
	}

	/**
	 *Metodo Modificador del atributo nuevoComentario
	 * @param nuevoComentario the nuevoComentario to set
	 */
	public void setNuevoComentario(ComentarioAsesor nuevoComentario) {
		this.nuevoComentario = nuevoComentario;
	}
	
	
	
//	public boolean isAutenticado() {
//		return autenticado;
//	}
//
//	public void setAutenticado(boolean autenticado) {
//		this.autenticado = autenticado;
//	}
//
//	public Asesor getAsesor() {
//		return asesor;
//	}
//
//	public void setAsesor(Asesor asesor) {
//		this.asesor = asesor;
//	}
//
//	public List<ResumenConsultaDTO> getListaConsultas() {
//		return listaConsultas;
//	}
//
//	public void setListaConsultas(List<ResumenConsultaDTO> listaConsultas) {
//		this.listaConsultas = listaConsultas;
//	}
//
//	public HtmlDataTable getTablaConsultas() {
//		return tablaConsultas;
//	}
//
//	public void setTablaConsultas(HtmlDataTable tablaConsultas) {
//		this.tablaConsultas = tablaConsultas;
//	}
//
//	public ResumenConsultaDTO getConsultaSeleccionada() {
//		return consultaSeleccionada;
//	}
//
//	public void setConsultaSeleccionada(ResumenConsultaDTO consultaSeleccionada) {
//		this.consultaSeleccionada = consultaSeleccionada;
//	}
//
//	public HtmlDataTable getTablaRespuesta() {
//		return tablaRespuesta;
//	}
//
//	public void setTablaRespuesta(HtmlDataTable tablaRespuesta) {
//		this.tablaRespuesta = tablaRespuesta;
//	}
//
//	public List<RespuestaConsulta> getListaRespuestas() {
//		return listaRespuestas;
//	}
//
//	public void setListaRespuestas(List<RespuestaConsulta> listaRespuestas) {
//		this.listaRespuestas = listaRespuestas;
//	}
//
//	public RespuestaConsulta getNuevaRespuesta() {
//		return nuevaRespuesta;
//	}
//
//	public void setNuevaRespuesta(RespuestaConsulta nuevaRespuesta) {
//		this.nuevaRespuesta = nuevaRespuesta;
//	}
//
//	public HtmlDataTable getTablaInvestigacion() {
//		return tablaInvestigacion;
//	}
//
//	public void setTablaInvestigacion(HtmlDataTable tablaInvestigacion) {
//		this.tablaInvestigacion = tablaInvestigacion;
//	}
//
//	public List<ResumenInvestigacionDTO> getListaInvestigaciones() {
//		return listaInvestigaciones;
//	}
//
//	public void setListaInvestigaciones(
//			List<ResumenInvestigacionDTO> listaInvestigaciones) {
//		this.listaInvestigaciones = listaInvestigaciones;
//	}
//
//	public ResumenInvestigacionDTO getInvestigacionSeleccionada() {
//		return investigacionSeleccionada;
//	}
//
//	public void setInvestigacionSeleccionada(
//			ResumenInvestigacionDTO investigacionSeleccionada) {
//		this.investigacionSeleccionada = investigacionSeleccionada;
//	}
//
//	public List<Segmento> getListaSegmentosInvestigacion() {
//		return listaSegmentosInvestigacion;
//	}
//
//	public void setListaSegmentosInvestigacion(
//			List<Segmento> listaSegmentosInvestigacion) {
//		this.listaSegmentosInvestigacion = listaSegmentosInvestigacion;
//	}
//
//	public List<Actividad> getListaActividadesInvestigacion() {
//		return listaActividadesInvestigacion;
//	}
//
//	public void setListaActividadesInvestigacion(
//			List<Actividad> listaActividadesInvestigacion) {
//		this.listaActividadesInvestigacion = listaActividadesInvestigacion;
//	}
//
//	public Bitacora4Maestro getBitacora4Maestro() {
//		return bitacora4Maestro;
//	}
//
//	public void setBitacora4Maestro(Bitacora4Maestro bitacora4Maestro) {
//		this.bitacora4Maestro = bitacora4Maestro;
//	}
//
//	public Segmento getSegmento1() {
//		return segmento1;
//	}
//
//	public void setSegmento1(Segmento segmento1) {
//		this.segmento1 = segmento1;
//	}
//
//	public Segmento getSegmento2() {
//		return segmento2;
//	}
//
//	public void setSegmento2(Segmento segmento2) {
//		this.segmento2 = segmento2;
//	}
//
//	public Segmento getSegmento3() {
//		return segmento3;
//	}
//
//	public void setSegmento3(Segmento segmento3) {
//		this.segmento3 = segmento3;
//	}
//
//	public ComentarioAsesor getNuevoComentario() {
//		return nuevoComentario;
//	}
//
//	public void setNuevoComentario(ComentarioAsesor nuevoComentario) {
//		this.nuevoComentario = nuevoComentario;
//	}
}
